package it.orma.iridehr.validators.azienda;

import java.util.Iterator;
import java.util.List;

import it.orma.iridehr.entities.azienda.Azienda;
import it.orma.iridehr.repository.ricercaAziende.RicercaAziendeRepository;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.binding.message.MessageBuilder;
import org.springframework.binding.message.MessageContext;
import org.springframework.binding.validation.ValidationContext;
import org.springframework.stereotype.Component;

@Component
public class AziendaValidator {
	
	@Autowired
	RicercaAziendeRepository ricercaAziendaRepository;
	
	public AziendaValidator() {
		
	}
	
	public void validate(Azienda azienda, ValidationContext context) {
		
		MessageContext messages = context.getMessageContext();
		if (StringUtils.isEmpty(azienda.getNome())) {
			messages.addMessage(new MessageBuilder().error().source("nome")
					.code("error.campo.obbligatorio").build());
		}
		//MP 2015.04.25
		/*if (StringUtils.isEmpty(azienda.getpIVA())) {
			messages.addMessage(new MessageBuilder().error().source("pIVA")
					.code("error.campo.obbligatorio").build());
		}*/
	
		/*if (StringUtils.isEmpty(azienda.getIndirizzoProvincia())) {
			messages.addMessage(new MessageBuilder().error().source("indirizzoProvincia")
					.code("error.campo.obbligatorio").build());
		}*/
		/*if (StringUtils.isEmpty(azienda.getIndirizzoCitta())) {
			messages.addMessage(new MessageBuilder().error().source("indirizzoCitta")
					.code("error.campo.obbligatorio").build());
		}
		if (StringUtils.isEmpty(azienda.getIndirizzoCAP())) {
			messages.addMessage(new MessageBuilder().error().source("indirizzoCAP")
					.code("error.campo.obbligatorio").build());
		}
		if (StringUtils.isEmpty(azienda.getIndirizzoVia())) {
			messages.addMessage(new MessageBuilder().error().source("indirizzoVia")
					.code("error.campo.obbligatorio").build());
		}
		if (StringUtils.isEmpty(azienda.getIndirizzoNazione())) {
			messages.addMessage(new MessageBuilder().error().source("indirizzoNazione")
					.code("error.campo.obbligatorio").build());
		}
		if (StringUtils.isEmpty(azienda.getSettore())) {
			messages.addMessage(new MessageBuilder().error().source("settore")
					.code("error.campo.obbligatorio").build());
		}*/
		
		if (!messages.hasErrorMessages()){
			List<Azienda> uguali= ricercaAziendaRepository.ricercaAzienda(azienda);
			if (azienda.getIdAzienda()==null){
				if (uguali!=null&&!uguali.isEmpty())
					messages.addMessage(new MessageBuilder().error().source("presente")
							.code("error.campo.obbligatorio").build());
			}else{
				if (uguali!=null&&!uguali.isEmpty()){
					boolean outcome = false;
					Iterator<Azienda> it = uguali.iterator();
					while(it.hasNext()){
						Azienda az = it.next();
						if (az.getIdAzienda().intValue()==azienda.getIdAzienda().intValue()){
							outcome=true;
							break;
						}
					}
					if (outcome==false){
						messages.addMessage(new MessageBuilder().error().source("presente")
								.code("error.campo.obbligatorio").build());
					}						
				}				
			}
			
		}
	}

}
